The Android platform is an open source software stack for mobile phones and other devices. An Android Software Development Kit (“SDK”) allows software developers to create applications that will run on the Android platform. Typically, Android applications are written in Java (a well-known programming language) and are compiled by the Android SDK tools, along with relevant data and resource files, into a single Android application package file. The Android application package file (hereinafter “apk”) for an application may be used to distribute and install the software and middleware for the application to run on the Android operating system. An application's apk may hold the elements of the application, including, for example, program code for the application, resources, assets, certificates, a manifest file, and other elements.
The manifest file may include one or more components such as, for example, activities, services, content providers, broadcast receivers, and/or other components. An Android device may check an apk's manifest file to determine whether a component exists or should be associated with the application. The manifest file may also include application configuration information including, for example, information about permissions, application programming interface (“API”) level, hardware requirements, software requirements, required API libraries, and/or other application configuration information. The manifest file may also contain information about how the application will run on different types of devices (e.g., by providing different layouts or scales for different screen sizes, different screen densities, and/or other device-specific configurations or features). When the Android device does not support the configurations in the manifest file, then the Android device may return an error or may use default settings. Conventionally, the manifest file (and the application's apk) may be created by application developers and delivered in a final form to the Android device for installation and use. The performance and scalability of the application may be considered by the application developers before making the application available for download and installation.
Because the Android platform is open source, numerous versions of the Android operating system (“OS”) may be available. For example, a first version of the Android OS may run on a first mobile device, and a second version of the Android OS may run on a second mobile device, even though the first and second mobile devices may be identical in terms of hardware. In other examples, different versions of the Android OS may run on mobile devices with different hardware, or the same version of the Android OS may run on mobile devices with different hardware. The version of the Android OS running on a mobile device may be dependent mostly or solely on the time the OS was downloaded or installed on the mobile device, and/or when the user of the mobile device updated the OS. Some versions may be dependent on both time and/or hardware of the mobile device.
Typically, the Android platform may also include a non-public application protocol interface (API) named ViewServer which may enable the device or a client accessing the device to determine the view parameters of an application. Because this API is non-public, it may not be enabled on production devices (such as mobile phones or tablets sold in stores). Further, the ViewServer API may change at any time without warning in any version of Android, because it is a non-public API. This makes the API incredibly unreliable for application developers. The ViewServer API is also not designed for real-time interaction and may be very slow. The slowness of the API may be result, in part, because that the ViewServer API may return an entire view state of an application. The ViewServer API may also dispatch to the Android WindowManager to resolve view data, which may also contribute to slower speed while using the API.
Given the various versions of the Android OS that are available and running on mobile devices, an application may not run consistently on the available Android operating systems, even when the hardware across those mobile devices may be identical.
The user experience of the application may also vary across Android devices due to the variations between Android operating systems and/or device hardware on the Android devices.
These issues may also be relevant for developing software to run on other open source platforms as well.
Conventional systems for developing applications for use across a plurality of devices and/or operating systems suffer from these and other drawbacks.